#include "I2C.H"

/****************************************************
 * 2022年4月8日
 * 吴昕灿
 * 51单片机
 * SDA P21
 * SCL P20
 * I2C初始化
 ***************************************************/

sbit SCL = GPIO_SCL;
sbit SDA = GPIO_SDA;

void delay(u16 i)
{
	while(i--);	
}



void delayms(u16 z)
{
  u16 x,y;
  for(x=z;x>0;x--)
      for(y=148;y>0;y--);
}

void IIC_Delay(unsigned char i)
{
    do
	{
		_nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();
	}while(i--);      
}

void I2C_Start(void)
{
	SDA = 1;
	SCL = 1;				
	IIC_Delay(5);
	SDA = 0;
	IIC_Delay(5);
	SCL = 0;	
}


void I2C_Stop(void)
{
	SDA = 0;
	SCL = 1;				
	IIC_Delay(5);
	SDA = 1;
}

bit I2C_WaitAck(void)
{ 
	SDA = 1;
	IIC_Delay(5);
	SCL = 1;
	IIC_Delay(5);
	if(SDA)    
	{   
		SCL = 0;
		I2C_Stop();
		return 0;
	}
	else  
	{ 
		SCL = 0;
		return 1;
	}
}

void I2C_SendByte(unsigned char byt)
{
	unsigned char i;
	for(i=0;i<8;i++)
	{   
		if(byt&0x80) 
		{	
			SDA = 1;
		}
		else 
		{
			SDA = 0;
		}
		IIC_Delay(5);
		SCL = 1;
		byt <<= 1;
		IIC_Delay(5);
		SCL = 0;
	}
}

unsigned char I2C_RecByte(void)
{
	unsigned char dat;
	unsigned char i;
	
	for(i=0;i<8;i++)
	{   
		SCL = 1;
		IIC_Delay(5);
		dat <<= 1;
		if(SDA) 
		dat |= 0x01;
		SCL = 0;
		IIC_Delay(5);
	}
	return dat;
}